Rebuilds only what the commit touched.

A push to an open pull request does not start over. Canary compares the commit with the last build, rebuilds the services whose files changed, and puts them back behind the same link.

A cache shared across branches
A new branch starts from the images main already built, so its first build is mostly cache.
The database stays put
Volumes survive a redeploy. Canary reseeds only when a migration changes the schema.

push 3c7d21e

48s

Round split totals to the cent

Service Result Time
web Rebuilt 2 of 9 layers changed 41s
api From cache Image reused from 9f3e1b0 0s
worker From cache Image reused from 9f3e1b0 0s
postgres Kept Volume attached, no reseed —

Live again in 48 seconds. The link did not change.

Asleep until somebody opens the link.

After 30 idle minutes a preview is frozen to disk and stops billing. The next request wakes it in about four seconds, with its data where the last reviewer left it.

Only awake hours are billed
A preview that stays open for a week usually bills three or four hours of it.
Wakes on a request, a push or a schedule
Keep one warm through a demo with a single line in canary.yml.
pr-482 Thu, Sep 24 Awake 3h 14m of 24h

12 AM6 AM12 PM6 PM

  1. 9:16 AM Live for #482 built in 3m 41s
  2. 10:49 AM Asleep after 30 idle minutes
  3. 12:24 PM Woke for a reviewer 4s
  4. 2:05 PM Torn down on merge

3.23 preview-hours billed $0.61

Comments land where the code is reviewed.

Anyone with the link can pin a note to the page they are looking at. Canary posts it to the pull request with the URL, the viewport and a screenshot, so nothing lives in a side channel.

No account needed to review
Designers, QA and the customer who asked for it open the same link. Access rules decide who may.
Resolved in the pull request
Closing the thread on GitHub or GitLab clears the pin on the page.
pr-482.northwind.canary.run/invoices 1440 × 900

Invoices

October · 5 open

  • INV-1042 Harlow Marine Supply $4,310.00
  • INV-1043 Stillwater Outfitters $1,872.50 1
  • INV-1044 Pine & Post Lumber $12,096.40
  • INV-1045 Calder Street Bakery $648.25
  • INV-1046 Tidewater Print Co. $2,204.80
Dana Whitlow · Design 2 minutes ago
The total wraps under the customer name at this width. Can the currency sit beneath the amount instead?

Posted to #482 with the URL, the viewport and a screenshot.

Your cloud does the work. Ours keeps the list.

A runner in your AWS or GCP account builds and hosts every preview. Canary's control plane only knows that a preview exists, where it answers and whether it is awake.

Nothing to open inbound
The runner dials out. Your network takes no connection it did not start.
SOC 2 Type II
Audited yearly, with a boundary short enough to read in one table.
runner-east-2 aws · us-east-2 Connected
What Where it lives
Source code Cloned by the runner, never copied out Your cloud
Database snapshots Masked before the restore Your cloud
Secrets Read from your vault at build time Your cloud
Build and app logs Streamed to your browser from the runner Your cloud
Preview status Awake, asleep or torn down Sent to Canary
Preview address So the link can find the runner Sent to Canary

Outbound only, over TLS 1.3. No inbound ports to open.

One staging box, or a preview per branch.

The same five questions, asked of both.

Question A shared staging server Canary

Who can use it right now

A shared staging server One branch at a time, booked in a channel.

Canary Every open pull request, at once.

The data in it

A shared staging server Whatever the last person left behind.

Canary Last night's snapshot, masked and restored for each branch.

When it breaks

A shared staging server A thread asking who deployed last.

Canary One pull request, one author, one log.

What it costs idle

A shared staging server A cluster running all month.

Canary Nothing. It is asleep after 30 minutes.

Cleaning up

A shared staging server A purge every quarter, if someone remembers.

Canary Torn down 2m 12s after the merge.

Questions before the first pull request.

The ones every platform team asks in the first call. If yours is not here, write to us and an engineer answers.

Ask an engineer
Does it work with a monorepo?

Yes. Point preview.from at the Compose file or chart of each app, and Canary builds only the apps whose paths changed in the pull request.

What about services Canary cannot run, like a payments sandbox?

Previews get the test credentials you scope to them, so they call the same sandboxes your laptop does. Webhooks from those services are routed to the preview by its address.

How big can a seeded database be?

Snapshots up to 250 GB restore from a copy-on-write image in under a minute. Above that, sample: keep the last 90 days of orders, say, and every row they reference.

Can someone outside the company open a preview?

If you allow it. A preview can be open to anyone with the link, limited to your workspace, or behind a password, and the rule lives in canary.yml.

What happens when a pull request is closed without merging?

The same teardown, after a one-hour grace period in case it was closed by mistake. Reopen it and the next push builds a fresh preview.

Do you support self-managed GitLab and GitHub Enterprise Server?

Yes: GitLab 16 and later, GitHub Enterprise Server 3.10 and later. The runner has to reach your instance. Canary does not.

Open one pull request and watch.

Connect a repository and Canary builds your first preview while you read the log. The first 500 preview-hours are free.

Two engineers reviewing a preview on a laptop
pr-482 torn down Merged into main · 14:05